package br.com.academy.managedbean;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.academy.dao.DadosPessoaisDao;
import br.com.academy.dao.EnderecoDao;
import br.com.academy.entidades.DadosPessoais;
import br.com.academy.entidades.Endereco;

@ManagedBean
@SessionScoped
public class ListarPessoaMB {

	@EJB
	DadosPessoaisDao pessoaDao = new DadosPessoaisDao();
	EnderecoDao enderecoDao = new EnderecoDao();
	List<DadosPessoais> pessoas = new ArrayList<DadosPessoais>();
	DadosPessoais pessoaSelec;
	Endereco enderecoSelec;
	boolean modoInsert;
	String nomePesq;

	public String getNomePesq() {
		return nomePesq;
	}

	public void setNomePesq(String nomePesq) {
		this.nomePesq = nomePesq;
	}

	public void iniciarTabela() {
		setPessoas(pessoaDao.pesqBeanNome(nomePesq));
		if (pessoas.size() > 0)
			Collections.sort(pessoas, new ComparaPessoa());
		setModoInsert(false);
	}

	public DadosPessoais getPessoaSelec() {
		return pessoaSelec;
	}

	public void setPessoaSelec(DadosPessoais pessoaSelect) {
		if (pessoaSelect != null)
			this.pessoaSelec = pessoaSelect;
	}

	public Endereco getEnderecoSelec() {
		return enderecoSelec;
	}

	public void setEnderecoSelec(Endereco enderecoSelec) {
		if (enderecoSelec != null)
		this.enderecoSelec = enderecoSelec;
	}

	public boolean isModoInsert() {
		return modoInsert;
	}

	public void setModoInsert(boolean modoInsert) {
		this.modoInsert = modoInsert;
	}

	public List<DadosPessoais> getPessoas() {
		return pessoas;
	}

	public void setPessoas(List<DadosPessoais> pessoas) {
		this.pessoas = pessoas;
	}

	public String cadastrar() {
		pessoaSelec = new DadosPessoais();
		setModoInsert(true);
		return "atualizar_pessoa";
	}

	public String editar() {
		if (pessoaSelec != null) {
			setModoInsert(false);
			return "atualizar_pessoa";
		} else
			return "";
	}

	public String salvar() {
		pessoaDao.salvar(pessoaSelec);
		enderecoDao.salvar(enderecoSelec);		
		return "listar_pessoas";
	}

	public String atualizar() {
		pessoaDao.atualizar(pessoaSelec);
		enderecoDao.atualizar(enderecoSelec);
		return "listar_pessoas";
	}

	public String remover() {
		DadosPessoais f = pessoaDao.getPessoa(getPessoaSelec().getId());
		pessoaSelec = null;
		pessoaDao.remove(f);
		Endereco e = enderecoDao.getPessoa(getPessoaSelec().getId());
		pessoaSelec = null;
		enderecoDao.remove(e);
		iniciarTabela();
		return "";
	}

	// Classe interna que ordena os pessoas por nome
	public class ComparaPessoa implements Comparator<DadosPessoais> {
		@Override
		public int compare(DadosPessoais alu1, DadosPessoais alu2) {
			return alu1.getNome().compareTo(alu2.getNome());
		}
	}

}
